// rle_common.h - RLE 压缩/解压缩的通用定义
#ifndef RLE_COMMON_H
#define RLE_COMMON_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义存档中每个文件头的结构
// 这是一个基本示例，可能需要更多字段，如原始文件大小、权限、时间戳等。
#define MAX_FILENAME_LEN 256

// 用于标识条目类型（文件或目录）的枚举
typedef enum {
    RLE_FILE_TYPE,
    RLE_DIRECTORY_TYPE
} EntryType;

// .rzp 文件中文件/目录条目头的结构
// 此头将位于每个文件的压缩数据之前，或标记一个目录条目。
typedef struct {
    char name[MAX_FILENAME_LEN]; // 文件或目录的原始名称
    EntryType type;              // 条目的类型（文件或目录）
    long long original_size;     // 文件的原始大小（目录为 0）
    long long compressed_size;   // 文件数据的压缩大小（目录或不适用时为 0）
    // 我们可能需要存储目录结构的相对路径信息
    char relative_path[MAX_FILENAME_LEN * 2]; // 存档内的相对路径
} RzpEntryHeader;


// RLE 压缩函数的占位符
// 从 input_stream 压缩数据并写入 output_stream
// 成功返回 0，错误返回非零值
// 还应输出压缩后的大小
int rle_compress(FILE *input_stream, FILE *output_stream, long long *compressed_size_out);

// RLE 解压缩函数的占位符
// 从 input_stream 解压缩数据并写入 output_stream
// 成功返回 0，错误返回非零值
int rle_decompress(FILE *input_stream, FILE *output_stream, long long compressed_size, long long original_size);

// 将条目头写入存档的辅助函数
void write_entry_header(FILE* archive_file, const RzpEntryHeader* header);

// 从存档读取条目头的辅助函数
int read_entry_header(FILE* archive_file, RzpEntryHeader* header);


#endif // RLE_COMMON_H